package com.tiancheng.trade.payment.channel.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;
import java.util.Optional;

/**
 * 银联商务ErrCode取值说明
 */
@Getter
@AllArgsConstructor
public enum UmsErrCodeEnum {
    SUCCESS("SUCCESS", "成功"),
    INTERNAL_ERROR("INTERNAL_ERROR", "内部错误（系统错误，请联系技术支持）"),
    BAD_REQUEST("BAD_REQUEST", "请求报文有错（报文格式或字段值有误，请对照文档检查）"),
    NO_SERVICE("NO_SERVICE", "没有能处理请求msgtype的服务（msgType错误，请检查文档，msgType是否拼写正确）"),
    TIMEOUT("TIMEOUT", "处理超时（处理超时，很可能是微信和支付宝的网络请求没应答，建议重试或者撤销交易）"),
    NO_ORDER("NO_ORDER", "找不到请求的原始订单（对应的mid+merOrderId不正确，无法找到原交易，请检查merOrderId是否跟原交易一致）"),
    OPERATION_NOT_ALLOWED("OPERATION_NOT_ALLOWED", "当前不允许此操作（订单已经关闭，不能执行退货等操作）"),
    TARGET_FAIL("TARGET_FAIL", "支付宝方支付失败，如请求没有成功，或者请求成功，但是没有正确处理"),
    DUP_ORDER("DUP_ORDER", "重复的订单请求（支付请求的merOrderId重复）"),
    NET_ERROR("NET_ERROR", "跟支付包通讯出问题，包括请求发送异常，报文应答不是200，请求被取消，应答超时等"),
    NO_MERCHANT("NO_MERCHANT", "找不到请求指定的商户"),
    ORDER_PROCESSING("ORDER_PROCESSING", "订单正在处理中，不允许并发操作（请等待一分钟后再试）"),
    INACTIVE_MERCHANT("INACTIVE_MERCHANT", "商户被置为inactive状态（交易商户在网付前置被冻结）"),
    ABNORMAL_REQUEST_TIME("ABNORMAL_REQUEST_TIME", "请求时间异常（请求终端或者平台的系统时间不正常，请检查系统时间）"),
    TXN_DISCARDED("TXN_DISCARDED", "请求开始处理时间延迟过大，交易被丢弃"),
    BAD_SIGN("BAD_SIGN", "签名错误"),
    INVALID_MSGSRC("INVALID_MSGSRC", "商户来源错误"),
    INVALID_ORDER("INVALID_ORDER", "订单信息异常"),
    NO_CROSS_DAY_TRADING("NO_CROSS_DAY_TRADING", "不允许跨日交易"),
    DENIED_IP("DENIED_IP", "不允许此IP交易"),
    INVLID_MERCHANT_CONFIG("INVLID_MERCHANT_CONFIG", "错误的商户配置"),
    INVALID_RESPONSE("INVALID_RESPONSE", "无效的应答报文"),
    ;
    private String code;
    private String desc;

    public static String getDesc(String code) {
        Optional<UmsErrCodeEnum> errCodeEnum = Arrays.stream(UmsErrCodeEnum.values()).filter(c -> c.code.equals(code)).findFirst();
        if (errCodeEnum.isPresent()) {
            return errCodeEnum.get().getDesc();
        }
        return "";
    }
}
